package com.hl.ruoyilkshop.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.hl.ruoyilkshop.mapper.GoodsSpecsMapper;
import com.hl.ruoyilkshop.domain.GoodsSpecs;
import com.hl.ruoyilkshop.domain.Specs;
import com.hl.ruoyilkshop.domain.vo.GoodsSpecsTreeVO;
import com.hl.ruoyilkshop.service.IGoodsSpecsService;
import com.hl.ruoyilkshop.service.ISpecsService;

/**
 * 商品规格Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-08-08
 */
@Service
public class GoodsSpecsServiceImpl implements IGoodsSpecsService 
{
    @Autowired
    private GoodsSpecsMapper goodsSpecsMapper;
    
    @Autowired
    private ISpecsService specsService;

    /**
     * 查询商品规格
     * 
     * @param goodsSpecId 商品规格主键
     * @return 商品规格
     */
    @Override
    public GoodsSpecs selectGoodsSpecsByGoodsSpecId(Integer goodsSpecId)
    {
        return goodsSpecsMapper.selectGoodsSpecsByGoodsSpecId(goodsSpecId);
    }

    /**
     * 查询商品规格列表
     * 
     * @param goodsSpecs 商品规格
     * @return 商品规格
     */
    @Override
    public List<GoodsSpecs> selectGoodsSpecsList(GoodsSpecs goodsSpecs)
    {
        return goodsSpecsMapper.selectGoodsSpecsList(goodsSpecs);
    }

    /**
     * 获取商品规格树形结构（包含规格值）
     * 
     * @param goodsSpecs 查询条件
     * @return 商品规格树形结构
     */
    @Override
    public List<GoodsSpecsTreeVO> selectGoodsSpecsTree(GoodsSpecs goodsSpecs)
    {
        // 获取所有规格数据
        List<GoodsSpecs> allGoodsSpecs = goodsSpecsMapper.selectGoodsSpecsList(goodsSpecs);
        
        // 构建树形结构
        List<GoodsSpecsTreeVO> treeList = new java.util.ArrayList<>();
        
        for (GoodsSpecs spec : allGoodsSpecs) {
            GoodsSpecsTreeVO treeVO = new GoodsSpecsTreeVO();
            treeVO.setGoodsSpecId(spec.getGoodsSpecId());
            treeVO.setGoodsSpecName(spec.getGoodsSpecName());
            treeVO.setBusinessId(spec.getBusinessId());
            treeVO.setUniqueKey("spec_" + spec.getGoodsSpecId()); // 设置规格的唯一标识
            
            // 获取该规格下的所有规格值
            Specs specsQuery = new Specs();
            specsQuery.setGoodsSpecsId(spec.getGoodsSpecId());
            specsQuery.setBusinessId(spec.getBusinessId());
            
            // 如果有规格值搜索条件，添加到查询中
            if (goodsSpecs.getSpecsValue() != null && !goodsSpecs.getSpecsValue().isEmpty()) {
                specsQuery.setSpecsValue(goodsSpecs.getSpecsValue());
            }
            
            List<Specs> specsList = specsService.selectSpecsList(specsQuery);
            
            // 将规格值转换为VO并添加到规格的子节点中
            for (Specs specsValue : specsList) {
                GoodsSpecsTreeVO.SpecsVO specsVO = new GoodsSpecsTreeVO.SpecsVO();
                specsVO.setId(specsValue.getId());
                specsVO.setSpecsValue(specsValue.getSpecsValue());
                specsVO.setGoodsSpecsId(specsValue.getGoodsSpecsId());
                specsVO.setBusinessId(specsValue.getBusinessId());
                specsVO.setUniqueKey("specsValue_" + specsValue.getId()); // 设置规格值的唯一标识
                treeVO.addSpecsValue(specsVO);
            }
            
            // 如果有规格值搜索条件，只显示包含匹配规格值的规格
            if (goodsSpecs.getSpecsValue() != null && !goodsSpecs.getSpecsValue().isEmpty()) {
                if (!specsList.isEmpty()) {
                    treeList.add(treeVO);
                }
            } else {
                treeList.add(treeVO);
            }
        }
        
        return treeList;
    }

    /**
     * 新增商品规格
     * 
     * @param goodsSpecs 商品规格
     * @return 结果
     */
    @Override
    public int insertGoodsSpecs(GoodsSpecs goodsSpecs)
    {
        return goodsSpecsMapper.insertGoodsSpecs(goodsSpecs);
    }

    /**
     * 修改商品规格
     * 
     * @param goodsSpecs 商品规格
     * @return 结果
     */
    @Override
    public int updateGoodsSpecs(GoodsSpecs goodsSpecs)
    {
        return goodsSpecsMapper.updateGoodsSpecs(goodsSpecs);
    }

    /**
     * 批量删除商品规格
     * 
     * @param goodsSpecIds 需要删除的商品规格主键
     * @return 结果
     */
    @Override
    public int deleteGoodsSpecsByGoodsSpecIds(Integer[] goodsSpecIds)
    {
        return goodsSpecsMapper.deleteGoodsSpecsByGoodsSpecIds(goodsSpecIds);
    }

    /**
     * 删除商品规格信息
     * 
     * @param goodsSpecId 商品规格主键
     * @return 结果
     */
    @Override
    public int deleteGoodsSpecsByGoodsSpecId(Integer goodsSpecId)
    {
        return goodsSpecsMapper.deleteGoodsSpecsByGoodsSpecId(goodsSpecId);
    }
}
